/*
1：下载axios
2:导入
3：创建axios副本
4：设置基地址
5：创建请求拦截与响应拦截
6：暴露
7：src/api/模块.js
8:定义api导入使用   */
import axios from 'axios'
import { Message } from 'element-ui'
import store from '@/store'
const _axios = axios.create({
  // 基地址：如果昨天你们配制好本地接口了且能启动成功了，启动后加入基地址到这里
  // 本地接口基地址: http://localhost:3000/api
  // 如果没有配制好的直接使用线上接口地址
  //   在线接口基地址:http://119.91.150.211:3000/api
  baseURL: process.env.VUE_APP_URL,
  withCredentials: true // axios:默认是同源请求才允许带cookie,非同源不允许带cookie，希望带上， withCredentials:true
})
_axios.interceptors.request.use(
  (config) => {
    /*
    token:
    1：全加
    2：需要加的才可以加，不需要加的不可加，加了就报错
       不需要的加的api配制上加入 noToken ：true
       if(!config.noToken){
        token处理
       }
    */
    // if (config.url.includes('?')) {
    //   config.url = config.url + '&lang=' + localStorage.getItem('lang')
    // } else {
    //   config.url = config.url + '?lang=' + localStorage.getItem('lang')
    // }

    config.headers.Authorization = `Bearer ${store.state.user.token}`
    return config
  },
  (error) => {
    return Promise.reject(error)
  }
)
// token失效
/*
1：写好token失效的条件
2：删除token
3：删除用户信息
4：提示一下
5：跳转到登录页
*/
_axios.interceptors.response.use(
  (res) => {
    if (res.data.success) {
      return res
    } else {
      // 提示错误
      // vant  toast提示success  fail
      // element  message success error  warning  info
      // vue文件：this.$message.(success | error | warning  |info)('错误信息')
      // js文件：导入再使用  import {Message} from 'element-ui'  Message====this.$message
      // alert(res.data.message)
      Message.error(res.data.message)
      // return undefined
      // 中止.then的执行，直接执行.catch
      return Promise.reject(new Error(res.data.message))
    }
  },
  (error) => {
    // console.dir(error)
    if (error.response && error.response.status === 401) {
      store.commit('user/logout')
      Message.error(error.response.data.message)
    }
    return Promise.reject(error)
  }
)
// function ajax(obj) {
//   return new Promise((resolve, reject) => {
//     _axios(obj)
//       .then((res) => {
//         resolve(res)
//       })
//       .catch(() => {
//         // reject(err)
//         // console.log(err)
//       })
//   })
// }

export default _axios
